import fs from 'fs'
import sugar from './sugar';
import config from '../../init/controConfig'

//工具 方法集
export default {
    /***
     * 获取时间 Y年 m月 d日 H时 i分 s秒
     * @param str
     * @param timestamp
     * @returns {string}
     */
    date(str="",timestamp): string{
        !timestamp && (timestamp=new Date())
        const date = new Date(timestamp);
        const Y = date.getFullYear();
        const m = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
        const d = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
        const H = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
        const i = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
        const s = date.getSeconds() < 10 ? '0' + date.getDate() : date.getSeconds();
        //执行替换
        // 'Y-m-d H:i:s'
        // @ts-ignore
        return str.replace('Y',Y+"").replace('m',m).replace('d',d).replace('H',H).replace('i',i).replace('s',s);
    },

    /***
     * 获取时间戳
     * @returns {number}
     */
    time(){
        return Date.now();
    },

    /***
     * 获取本机所有的ip地址
     * @returns {*[]}
     */
    local_ip(){
        let os = require('os');
        let ip = os.networkInterfaces();
        let IP = [];
        Object.keys(ip).forEach(e=>{
            IP.push(...ip[e].filter(res=>{
                if((/^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/).test(res.address)){
                    return res;
                }
            }))
        })
        return IP;
    },


    /***
     * 检查路径是否为某个文件的地址
     * @param url
     * @returns {string|boolean}
     */
    isFile_Path(url:string){
        let copy = sugar.path(config.getAddress("public") + url);
        // 存在并且是一个文件
        if(fs.existsSync(copy) && fs.statSync(copy).isFile()){return copy}

        //没有后缀并且最后没有/
        // if(url.endsWith("/")){copy+="index.html"}else{}
        copy+="/index.html";
        //判断是否是公共文件
        if(fs.existsSync(copy)){
            //文件存在,但是尾部没有/ 进行重定向
            if(!url.endsWith("/")){
                global.async_global.res.writeHead(301,
                    {Location: url+"/"}
                );
            }
            // 返回这个文件的地址
            return copy;
        }else{
            return false;
        }
    },

    isAsync (func:Function) {
        const string = func.toString().trim();
        return !!(
            // 本地的
            string.match(/^async /) ||
            // babel (this may change, but hey...)
            string.match(/return _ref[^\.]*\.apply/)
            // 插入另一个脏转换器检查
            // 还有其他更复杂的情况，可能需要您检查返回行*承诺*
        );
    }

}